import jwt
import datetime


class JwtUtil:
    @staticmethod
    def create_jwt(secret_key, ttl_seconds, claims):
        """
        生成 JWT 令牌。

        :param secret_key: 用于签名令牌的密钥
        :param ttl_seconds: 令牌的有效时间，以秒为单位
        :param claims: 包含在令牌中的其他声明
        :return: JWT 令牌
        """
        exp_time = datetime.datetime.utcnow() + datetime.timedelta(seconds=ttl_seconds)
        payload = {
            'exp': exp_time,
            **claims
        }

        token = jwt.encode(payload, secret_key, algorithm='HS256')
        return token

    @staticmethod
    def parse_jwt(secret_key, token):
        """
        解析和验证 JWT 令牌。

        :param secret_key: 用于签名令牌的密钥
        :param token: 要解析的 JWT 令牌
        :return: 从令牌解码的声明
        """
        try:
            claims = jwt.decode(token, secret_key, algorithms=['HS256'])
            return claims
        except jwt.ExpiredSignatureError:
            # 处理令牌过期错误
            return {'error': '令牌已过期'}
        except jwt.InvalidTokenError:
            # 处理无效令牌错误
            return {'error': '无效令牌'}

# 示例用法:
# secret_key = 'your_secret_key'
# ttl_seconds = 3600  # 1 小时
# claims = {'user_id': 123, 'username': 'example'}
#
# jwt_token = JwtUtil.create_jwt(secret_key, ttl_seconds, claims)
# print(f'生成的 JWT：{jwt_token}')
#
# decoded_claims = JwtUtil.parse_jwt(secret_key, jwt_token)
# print(f'解码的声明：{decoded_claims}')
